package implementacion;

import tda.ArbolClientesTDA;
import tda.FacturacionTDA;
import tda.ItemFactura;

public class Cliente implements ArbolClientesTDA{

	NodoArbolClientes raiz;
	
	@Override
	public void inicializar() {
		raiz = null;
	}

	@Override
	public void agregarCliente(int nroCliente, String nombre) {
		if(raiz == null){
			raiz = new NodoArbolClientes();
			raiz.nombre = nombre;
			raiz.numero = nroCliente;
			FacturacionTDA facturas = new FacturacionD();
			facturas.inicializar();
			raiz.facturas = facturas;
			raiz.hijoI = new Cliente();
			raiz.hijoD = new Cliente();
			raiz.hijoI.inicializar();
			raiz.hijoD.inicializar();
		} else {
			if (raiz.numero > nroCliente) {
				raiz.hijoI.agregarCliente(nroCliente, nombre);
			}
			if (raiz.numero < nroCliente){
				raiz.hijoD.agregarCliente(nroCliente, nombre);
			}
		}
	}

	@Override
//	public void agregarItemFactura(int nroCliente, int nroFactura,
//			ItemFactura item) {
//		agregarItemFacturaAux(nroCliente, nroFactura, item);
//	}
	
	public void agregarItemFactura(int nroCliente, int nroFactura, ItemFactura item){
		if(raiz != null)
		{
		   if(raiz.numero== nroCliente)
		  {
			  raiz.facturas.agregar(nroFactura,item);
		  }
		  else if(raiz.numero > nroCliente)
		  {
			  raiz.hijoI.agregarItemFactura(nroCliente, nroFactura, item);
		  }
		  else 
		  {
			  raiz.hijoD.agregarItemFactura(nroCliente, nroFactura, item);
		  }
		}
	}

	@Override
	public void eliminarCliente(int numero) {
		if(raiz != null)
		{
			if(raiz.numero == numero && raiz.hijoD.arbolVacio() && raiz.hijoI.arbolVacio())	
			{
			  raiz = null;
			}
			else if (raiz.numero == numero && !raiz.hijoI.arbolVacio())
			{
				ArbolClientesTDA aux = mayor(raiz.hijoI);
				raiz.numero = aux.nroCliente();
				raiz.nombre = aux.nombreCliente();
				raiz.facturas = aux.facturas();
				raiz.hijoI.eliminarCliente(raiz.numero);
			}
			else if(raiz.numero == numero && raiz.hijoI.arbolVacio())
			{
				ArbolClientesTDA aux = menor(raiz.hijoD);
				raiz.numero = aux.nroCliente();
				raiz.nombre = aux.nombreCliente();
				raiz.facturas = aux.facturas();
				raiz.hijoD.eliminarCliente(raiz.numero);
			}
			else if(raiz.numero > numero)
			{
				raiz.hijoI.eliminarCliente(numero);
			}
			else if(raiz.numero < numero)
			{
				raiz.hijoD.eliminarCliente(numero);
			}
		}
	}
	
	@Override
	public ArbolClientesTDA hijoIzquierdo() {
		return raiz.hijoI;
	}

	@Override
	public ArbolClientesTDA hijoDerecho() {
		return raiz.hijoD;
	}

	@Override
	public int nroCliente() {
		return raiz.numero;
	}

	@Override
	public String nombreCliente() {
		return raiz.nombre;
	}

	@Override
	public FacturacionTDA facturas() {
		return raiz.facturas;
	}

	@Override
	public boolean arbolVacio() {
		return (raiz == null);
	}

	
	private ArbolClientesTDA menor(ArbolClientesTDA nodo)
	{
		if(nodo.hijoIzquierdo().arbolVacio())
			return nodo;
		return menor(nodo.hijoIzquierdo());
	}

	private ArbolClientesTDA mayor(ArbolClientesTDA nodo)
	{
		if(nodo.hijoDerecho().arbolVacio())
			return nodo;
		return mayor(nodo.hijoDerecho());
	}




}
